package modelo;

import excepciones.TableroIndiceFueraDeRangoExcepcion;

import java.util.Iterator;

public abstract class MinaDeTiempo extends Mina {
	
	protected int turnos;
	protected int turnoActual;
	
	public MinaDeTiempo() {
		this.turnoActual = 0;
	}
	
	@Override
	public void explotar(Tablero tablero) {
		Iterator<Barco> barcos;
		Posicion posicionExplosion;
		
		// Recorre el rango de explosion de la mina y destruye las partes de barcos en esa posicion.
		for(int i = this.posicion.getFila(); i <= this.posicion.getFila() + this.rango * 2; i++) {
			for(int j = this.posicion.getColumna(); j <= this.posicion.getColumna() + this.rango * 2; j++) {
				//filaE, colE son fila y columna donde la explosion llega.
				int filaE = i - this.rango;
				int colE = j - this.rango;
				try {
					//tomam la coleccion de barcos(casteada a Iterador) en esa posicion de la explosion.
					barcos = (tablero.getPosicion(filaE, colE)).getBarcos();
					posicionExplosion = tablero.getPosicion(filaE, colE);
					this.hacerDanio(barcos, posicionExplosion);
				}
				catch (TableroIndiceFueraDeRangoExcepcion unError) { }
			}
		}
		this.posicion.quitarMina();
	}
	
	@Override
	public boolean puedeExplotar() {
		return (this.turnoActual == this.turnos || this.turnoActual<0);
	}
	
	@Override
	public void siguienteTurno() {
		this.turnoActual++;
	}
}
